package dao;

import java.util.HashMap;
import model.Pedido;
import model.Produto;
import controller.ProdutoController;

/**
 * Classe que modifica o HashMap de Produtos.
 * @author Pedro
 * @author Dayane
 */

public class ProdutoDAO {
	
	/**
	 * Variavel para guradar as mensagens de erro ou de sucesso
	 */
	private static String msg = "";
	
	public static String getMsg(){
		return msg;
	}
	
	/*
	 * Pegar produtos cadastrados pela lavanderia
	 */
	
	/**
	 * Apartir de uma chave, pegar um produto.
	 * 
	 * @param produtoKey
	 * @return null or Produto
	 */
	public static Produto loadByKey(HashMap<Integer, Produto> produtoList, int key ){
		if (produtoList.containsKey(key)) {
			ProdutoDAO.msg = "Produto encontrado.";
			return produtoList.get(key);
		}
		ProdutoDAO.msg = "Produto nao cadastrado.";
		return null;
	}
	
	public Produto loadByKeyFromUser(HashMap<Integer, Produto> produtoList){
		return ProdutoDAO.loadByKey(produtoList, ProdutoController.askKey());
	}
	
	/**
	 * Incluir um produto no hash. Pega os dados com scanner usando ProdutoController
	 * 
	 * @return boolean
	 */
/*	public static boolean incluir() {
		Produto Prod = ProdutoController.toInclude();
		
		if (!Produto.getProdutoList().containsKey(Prod.getKey())) {
			Produto.getProdutoList().put(Prod.getKey(), Prod);

			ProdutoDAO.msg = "Produto cadastrado com sucesso.";
			return true;
		}
		ProdutoDAO.msg = "Produto ja cadastrado.";
		return false;
	} */
	
	public static boolean incluir(HashMap<Integer, Produto> produtoList ) {
		Produto prod = ProdutoController.toInclude();
		
		int key = prod.getKey();
		if (!produtoList.containsKey(key)) {
			produtoList.put(key, prod);

			ProdutoDAO.msg = "Produto cadastrado com sucesso.";
			return true;
		}
		ProdutoDAO.msg = "Produto ja cadastrado.";
		return false;
	}
	
	/**
	 * Exclui um produto do hash. Pega as infos para isso do ProdutoController 
	 * 
	 * @return boolean
	 */
	public static boolean excluir(HashMap<Integer, Produto> produtoList) {
		Produto prod = ProdutoController.toDelete(produtoList);
		
		if (prod != null) {
			produtoList.remove(prod.getKey());
			ProdutoDAO.msg = "Pedido excluido.";
			return true;
		}
		ProdutoDAO.msg = "Pedido nao excluido.";
		return false;
	}
	
	/**
	 * 
	 * Alterar um produto no hash. Pega infos para alterar do ProdutoController
	 * 
	 * @param produtoList
	 * @param key
	 * @return boolean
	 */
	public static boolean alterar(HashMap<Integer, Produto> produtoList) {
		int key = ProdutoController.askKey();
		
		if (produtoList.containsKey(key)) {
			ProdutoController.toUpdate(produtoList.get(key));			
			ProdutoDAO.msg = "Alteracoes solicitadas feitas com sucesso.";
			return true;
		}
		
		ProdutoDAO.msg = "Cliente nao cadastrado.";
		return false;
	}
	
	/*
	 * Produtos pegos dos pedidos 
	 */
	
	/**
	 * Apartir de uma chave, pegar um produto de um pedido.
	 * 
	 * @param produtoKey
	 * @return null or Produto
	 */
	public Produto loadByKey(Pedido pedido, int produtoKey){

		if (pedido.getProdutoList().containsKey(produtoKey)) {
			ProdutoDAO.msg = "Produto encontrado.";
			return pedido.getProdutoList().get(produtoKey);
		}
		ProdutoDAO.msg = "Produto nao cadastrado.";
		return null;
	}
	/**
	 * Apartir de uma chave passada pelo usuario, retornar um produto de um pedido.
	 * 
	 * @param pedido
	 * @return
	 */
	public Produto loadByKeyFromUser(Pedido pedido){
		return this.loadByKey(pedido, ProdutoController.askKey());
	}
	
	/**
	 * Incluir um produto no hash de pedidos. Pega os dados com scanner usando ProdutoController
	 * 
	 * @return boolean
	 */
	public boolean incluir(Pedido pedido) {
		Produto prod = ProdutoController.toInclude();
		
		if (!pedido.getProdutoList().containsKey(prod.getKey())) {
			pedido.getProdutoList().put(prod.getKey(), prod);

			ProdutoDAO.msg = "Produto cadastrado com sucesso.";
			return true;
		}
		ProdutoDAO.msg = "Produto ja cadastrado.";
		return false;
	}
	
	/**
	 * Exclui um produto do hash de pedidos. Pega as infos para isso do ProdutoController 
	 * 
	 * @param pedido
	 * 
	 * @return boolean
	 */
	public boolean excluir(HashMap<Integer, Produto> produtoList, Pedido pedido) {
		Produto prod = ProdutoController.toDelete(produtoList);
		
		if (prod != null) {
			pedido.getProdutoList().remove(prod.getKey());
			ProdutoDAO.msg = "Pedido excluido.";
			return true;
		}
		ProdutoDAO.msg = "Pedido nao excluido.";
		return false;
	}
	
	/**
	 * 
	 * Alterar um produto no hash de pedidos. Pega infos apra alterar do ProdutoController
	 * 
	 * @param pedido
	 * @return boolean
	 */
	public boolean alterar(Pedido pedido) {
		HashMap<Integer, Produto> produtoList = pedido.getProdutoList();
		
		int key = ProdutoController.askKey();
		
		if (produtoList.containsKey(key)) {
			ProdutoController.toUpdate(produtoList.get(key));
			
			ProdutoDAO.msg = "Alteracoes solicitadas feitas com sucesso.";
			return true;
		}
		
		ProdutoDAO.msg = "Cliente nao cadastrado.";
		return false;
	}
	
}